package com.lagou.niancheng.rpc.common.handler;

import com.lagou.niancheng.rpc.common.entity.SimpleRpcProtocol;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;


/**
 * 将协议对象写入响应通道中
 *
 * @author 大犬
 * @date 2020/4/30
 */
public class SimpleRpcProtocolEncoder extends MessageToByteEncoder<SimpleRpcProtocol> {

    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, SimpleRpcProtocol simpleRpcProtocol, ByteBuf byteBuf) throws Exception {
        // 1.写协议标记
        byteBuf.writeBytes(simpleRpcProtocol.getSimpleRpcMark().getBytes());
        // 3.写headerLength
        byteBuf.writeShort((short) simpleRpcProtocol.getHeader().length);
        // 4.写header
        byteBuf.writeBytes(simpleRpcProtocol.getHeader());
        // 5.写bodyLength
        byteBuf.writeInt(simpleRpcProtocol.getContent().length);
        // 6.写body
        byteBuf.writeBytes(simpleRpcProtocol.getContent());
    }
}
